<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>扩展接口</title>
</head>
<body>
<script src="../js/promiseAjax.js"></script>
<script>
    //resolve
    //使用promise.resolve 方法可以快速返回一个promise对象
    //根据值返加promise
    // Promise.resolve("后盾人").then(value => {
    //     console.log(value);
    // });

    //下面将请求结果缓存,如果再次请求的时候直接返回带值的promise
    // function query(name) {
    //     let cache = query.cache || (query.cache = new Map());
    //     if(cache.has(name)){
    //         console.log("走缓存了");
    //         return Promise.resolve(cache.get(name));
    //     }
    //     return Ajax(`http://localhost/basicjs/promise/php/user.php?name=${name}`).then(
    //         response => {
    //             console.log(response);
    //             cache.set(name,response);
    //             console.log("没走缓存");
    //             return response;
    //         }
    //     );
    // }
    //
    // query("向军").then(response => {
    //     console.log(response)
    // });
    //
    // setTimeout(() => {
    //     query('向军').then(response => {
    //         console.log(response)
    //     })
    // },2000);

    //如果是thenable对象,会将对象包装成promise对象，至于其他的promise对象是一样的
    // const hd = {
    //     then(resolve,reject){
    //         resolve("后盾人");
    //     }
    // };
    // Promise.resolve(hd).then(value => {
    //     console.log(value);
    // });

    //reject
    //和Promise.resolve 类似,reject生成一个失败的promise
    //相当于直接生成一个promise对象并且执行了对象里面的reject拒绝方法
    // Promise.reject("fail").catch(error => console.log(error));


    //下面使用Promise.reject  设置状态
    // new Promise(resolve => {
    //     resolve("后盾人");
    // })
    // .then(v => {
    //     if(v != "houdurnen.com") return Promise.reject(new Error('fail'));
    // }).catch(error => {
    //     console.log(error);
    // })
    // ;


    //all

    //使用promise.all 方法可以同时执行多个并行异步操作,比如页面加载的同时获取课程列表与推荐课程
    //任何一个promise执行失败就会调用catch方法
    //适用于一次发送多个异步操作
    //参数必须是可以迭代的类型,如Array/Set
    //成功后返回promise结果的有序数组

    //下面的例子当中 hdcms,houdunren 两个Promise的状态都为fulfilled时,hd状态为fulfilled
    //当一个任务失败，就会调用catch




    // const hdcms = new Promise((resolve,reject) => {
    //     setTimeout(() => {
    //         resolve('第一个promise');
    //     },1000);
    // });
    //
    // const houdunren = new Promise((resolve,reject) => {
    //     setTimeout(() => {
    //         resolve('第二个异步');
    //     },2000);
    // });
    //
    // const  hd = Promise.all([hdcms,houdunren])
    // .then(results => {
    //     console.log(results);
    // }).catch(msg => {
    //     console.log(msg);
    // })
    // ;

    //根据用户批量获取用户资料
    //使用Promise.all() 的时候  只要有一个不符合条件  数据将不返回   所有都符合条件的时候，数据才会返回
    // function getUsers(names) {
    //     let promises = names.map(name => {
    //         return Ajax(`http://localhost/basicjs/promise/php/user.php?name=${name}`);
    //     });
    //     return Promise.all(promises);
    // }
    //
    // getUsers(['向军','后盾人1']).then(users => {
    //     console.log(users);
    // }).catch(msg => {
    //     console.log(msg)
    // });



    






</script>
</body>
</html>
